/*
 * Metaverse Core
 * Copyright (C) 2010 Vyacheslav Vorobyov, All rights reserved.
 * See LICENSE for full license information.
 */
package org.metaverse.warehouse;

import java.util.Date;
import java.util.List;

import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;

/**
 * This is an extension of a concept of statement. The new slots 
 * it introduces are:
 * <l>
 *  <li>user - who made a statement</li> 
 *  <li>last assert time - when statement made last time by user</li>
 * </l> 
 * @author vjache
 *
 */
public interface Senary extends Statement, Iterable<Value> {

	/**
	 * Enumeration of constants naming a slots of senary.
	 * 
	 * @author vjache
	 *
	 */
	public enum Slot
	{
		Subject,
		Predicate,
		Object,
		Context,
		User,
		LastAssertTime
	}
	
	Slot[] SPOCU = {
			Slot.Subject,
			Slot.Predicate,
			Slot.Object,
			Slot.Context,
			Slot.User}; 
	/**
	 * Return a user who made this statement.
	 */
	URI getUser();
	/**
	 * Return a last time when user made this statement.
	 */
	Date getLastAssertTime();
	/**
	 * Return a slot value.
	 */
	List<Value> getSlots(Slot... aSlot);
}
